package com.linyaonan.leetcode.medium._1493;

import java.util.ArrayList;

/**
 *
 * 给你一个二进制数组 nums ，你需要从中删掉一个元素。
 *
 * 请你在删掉元素的结果数组中，返回最长的且只包含 1 的非空子数组的长度。
 *
 * 如果不存在这样的子数组，请返回 0 。
 *
 *
 *
 * 提示 1：
 *
 * 输入：nums = [1,1,0,1]
 * 输出：3
 * 解释：删掉位置 2 的数后，[1,1,1] 包含 3 个 1 。
 * 示例 2：
 *
 * 输入：nums = [0,1,1,1,0,1,1,0,1]
 * 输出：5
 * 解释：删掉位置 4 的数字后，[0,1,1,1,1,1,0,1] 的最长全 1 子数组为 [1,1,1,1,1] 。
 * 示例 3：
 *
 * 输入：nums = [1,1,1]
 * 输出：2
 * 解释：你必须要删除一个元素。
 *
 *
 * 提示：
 *
 * 1 <= nums.length <= 105
 * nums[i] 要么是 0 要么是 1 。
 *
 * @author: Lin
 * @date: 2024/10/27
 */
public class LongestSubarrayOfElement {

    /**
     * 按照0进行切分
     *
     * 0,1,1,1,0,1,1,0,0,1 =>
     * 0,3,2,0,1
     *
     * @param nums
     * @return
     */
    public int longestSubarray(int[] nums) {

        int l = 0;
        int r = 0;
        ArrayList<Integer> saved = new ArrayList<>();
        while (l <= r && r < nums.length) {
            if (nums[r] == 1) {
                r++;
            } else {
                saved.add(r - l);
                r = r + 1;
                l = r;
            }
        }
        // 最后单独的连续1
        saved.add(r - l);

        // 表示全部连续的1
        if (saved.size() == 1) {
            return nums.length - 1;
        }
        int result = Integer.MIN_VALUE;

        for (int i = 0; i < saved.size() - 1; i++) {
            result = Math.max(result, (saved.get(i) + saved.get(i + 1)));
        }
        return result;

    }

}
